5 REM CHARACTER SET EDITOR - BY DAN PINAL›10 REM HIT RESET BEFORE RERUNNING›20 REM SO MEMTOP IS RESET›30 POKE 106,PEEK(106)-16:GRAPHICS 0:REM RESERVE ROOM FOR 2 CHR SETS & PMG›40 PMBASE=PEEK(106):DLIST=PEEK(560)+256*PEEK(561):CB1=PEEK(106)+8:CB2=PEEK(106)+12›50 SET1=CB1*256:SET2=CB2*256›60 GOSUB 1000›70 POKE 559,62:POKE 54279,PMBASE:POKE 53277,3›80 POKE 703,4:POKE 752,1›90 DRAW=1›100 REM COMMAND›110 ? "SAVE,LOAD, OR EDIT"›120 GET #1,X›130 IF X=69 THEN 300:REM EDIT›140 IF X=76 THEN C$="L":CMD=4:GOTO 170›150 IF X=83 THEN C$="S":CMD=8:GOTO 170›160 GOTO 120›170 ? "NAME OF FILE";:INPUT Q$›180 F$="D:":IF Q$="" THEN 170›190 IF Q$(2,2)=":" OR Q$(3,3)=":" THEN F$=Q$:GOTO 210›200 F$(3)=Q$:REM OTHERWISE DEFAULT TO DRIVE 1›210 TRAP 250:IOCB=2:OPEN #IOCB,CMD,0,F$›220 X=USR(CIO,IOCB,SET1,1024,ADR(C$))›240 CLOSE #IOCB:GOTO 100›250 CLOSE #IOCB:? "I/0 ERROR":GOTO 100›300 REM ›310 TRAP 100:? "CHARACTER # TO EDIT OR RETURN";:INPUT CH:TRAP 40000›320 IF CH<0 OR CH>127 THEN 300›330 FOR L1=0 TO 7›340 TEMP=PEEK(SET1+CH*8+L1)›350 FOR L2=0 TO 7›360 X=L1*8+L2+1›370 B$(X,X)=CHR$(33):REM ASSUME BLANK (!)›380 IF TEMP>=BIT(L2) THEN B$(X,X)=CHR$(34):TEMP=TEMP-BIT(L2):REM (")›390 NEXT L2›400 POSITION 2,2+L1:? #6,B$(L1*8+1,L1*8+8);›410 NEXT L1›420 H=0:V=0›430 ? ", SPACE BAR TO DRAW OR JOYSTICK"›440 ? "D=DRAW,U=UNDRAW, CTL CLEAR TO ERASE"›450 ? "ESC TO EXIT"›500 X=USR(PCURSOR,H,PLAYER0 +V):S=S(STICK(0)):IF S>0 THEN POKE 764,S›505 IF NOT STRIG(0) THEN POKE 764,33›510 IF PEEK(764)=255 THEN 500›520 GET #1,X›530 IF X<>45 THEN 550:REM UP›540 V=V-(V-1>=0):GOTO 500›550 IF X<>61 THEN 570:REM DOWN›560 V=V+(V+1<8):GOTO 500›570 IF X<>43 THEN 590:REM LEFT›580 H=H-(H-1>=0):GOTO 500›590 IF X<>42 THEN 610:REM RIGHT›600 H=H+(H+1<8):GOTO 500›610 IF X<>28 THEN 630:REM CTL UP›620 V=V-(V-1>=0):H=H+(H+1<8):GOTO 500›630 IF X<>29 THEN 650:REM CTL DOWN›640 V=V+(V+1<8):H=H-(H-1>=0):GOTO 500›650 IF X<>30 THEN 670:REM CTL LEFT›660 V=V-(V-1>=0):H=H-(H-1>=0):GOTO 500›670 IF X<>31 THEN 690:REM CTL RIGHT›680 V=V+(V+1<8):H=H+(H+1<8):GOTO 500›690 IF X<>32 THEN 710:REM SPACE›700 B$(V*8+H+1,V*8+H+1)=CHR$(33+DRAW):POSITION 2,2+V:? #6;B$(V*8+1,V*8+8);›701 BYTE=0:FOR L1=0 TO 7:X=V*8+L1+1›702 IF ASC(B$(X,X))-33 THEN BYTE=BYTE+BIT(L1)›703 NEXT L1:POKE SET1+CH*8+V,BYTE:GOTO 500›710 IF X<>68 THEN 730:REM D›720 DRAW=1:POKE SCREEN+2,128:GOTO 500›730 IF X<>85 THEN 750:REM U›740 DRAW=0:POKE SCREEN+2,0:GOTO 500›750 IF X<>125 THEN 770:REM CLEAR›760 FOR L1=0 TO 7:POKE SET1+CH*8+L1,0:NEXT L1›765 GOTO 330›770 IF X<>27 THEN 500:REM ESC›998 GOTO 100›999 STOP ›1000 REM DLI& SETUP ARE 75 BYTES STARTING AT 1536›1010 DATA 104,169,6,162,6,160,11,32,92,228,96,169,48,141,0,2,169,6,141,1,2,169,192,141,14›1020 DATA 212,174,254,6,165,20,41,7,208,10,165,20,41,15,240,1,138,141,0,208,76,95,228,72,173›1030 DATA 255,6,141,9,212,169,67,141,0,2,169,6,141,1,2,104,64,72,169,224,141,9,212,104,64›1040 REM THIS CIO SUB. IS 49 BYTES›1050 DATA 104,104,104,10,10,10,10,170,104,157,69,3,104,157,68,3,104,157,73,3,104,157,72,3,104›1060 DATA 133,213,104,133,212,160,0,177,212,160,7,201,83,208,2,160,11,152,157,66,3,76,86,228›1070 REM OPEN #IOCB,IO,0,FILE$:X=USR(CIO,IOCB,BUFADR,BUFLEN,ADR("S" or"L"))›1080 REM SET MOVE IS 34 BYTES›1090 DATA 104,104,133,212,104,133,213,169,0,133,206,169,224,133,207,162,4,160,0,177,206,145›1100 DATA 212,200,208,249,230,207,230,213,202,208,242,96›1110 REM PCURSOR 41 BYTES›1120 DATA 104,104,104,10,10,105,56,141,254,6,104,133,213,169,0,133,212,168,145,212,200,208,251›1130 DATA 104,10,10,10,105,48,133,212,160,7,169,240,145,212,136,16,251,96›1132 REM CLEAR PM AREA SUBROUTINE›1134 DATA 104,104,133,213,104,133,212,162,0,160,0,169,0,145,212›1136 DATA 200,208,251,230,213,232,224,8,144,240,96›1140 SETUP=1536:CIO=SETUP+75:SETMOVE=CIO+49:PCURSOR=SETMOVE+34:CLEAR=PCURSOR+41›1150 FOR L1=1536 TO 1760:READ X:POKE L1,X:NEXT L1›1160 POKE 756,CB2:POKE 1791,CB1›1170 X=USR(SETMOVE,CB1):X=USR(SETMOVE,CB2)›1180 FOR L1=SET2 TO SET2+23›1190 READ X:POKE L1,X:NEXT L1›1200 POKE DLIST+14,130:POKE DLIST+24,130›1210 REM ›1220 X=USR(SETUP)›1230 REM ›1240 DATA 0,0,0,0,0,0,0,0›1250 DATA 255,129,129,129,129,129,129,255›1260 DATA 255,129,189,189,189,189,129,255›1270 POKE 703,4:POKE 752,1›1280 COLOR 33:FOR L1=2 TO 9›1290 PLOT L1,2:DRAWTO L1,9›1300 NEXT L1›1310 SCREEN=PEEK(DLIST+4)+256*PEEK(DLIST+5)›1320 ADDR=SCREEN+40*11+2›1330 FOR L1=0 TO 7:FOR L2=0 TO 31›1340 POKE ADDR,L1*32+L2:ADDR=ADDR+1›1350 NEXT L2:ADDR=ADDR+8:NEXT L1›1360 OPEN #1,4,0,"K:"›1370 DIM F$(16),Q$(16),C$(1),B$(64),BIT(7),BYTE(7),S(15)›1380 B$="!":B$(64)="!":B$(2)=B$›1390 BIT(0)=128:BIT(1)=64:BIT(2)=32:BIT(3)=16:BIT(4)=8:BIT(5)=4:BIT(6)=2:BIT(7)=1›1400 FOR L1=0 TO 15:S(L1)=0:NEXT L1›1410 S(5)=135:S(6)=142:S(7)=7›1420 S(9)=143:S(10)=(134):S(11)=6›1430 S(13)=15:S(14)=14›1440 POKE 704,10:POKE 705,70:POKE 706,70:POKE 707,70›1445 X=USR(CLEAR,PMBASE*256):REM CLEAR PM AREA›1450 PLAYER0=PMBASE*256+1024:PLAYER1=PLAYER0+256:PLAYER2=PLAYER1+256:PLAYER3=PLAYER2+256›1460 FOR L1=44 TO 115›1470 POKE PLAYER2+L1,15:POKE PLAYER3+L1,15:NEXT L1›1480 FOR L1=0 TO 3:POKE PLAYER1+44+L1,255:POKE PLAYER1+112+L1,255:NEXT L1›1490 POKE 53257,3:POKE 53249,56:POKE 53250,48:POKE 53251,84›1500 RETURN ›